package main
import (
	"net/http"
	"fmt"
	"io/ioutil"
	"os"
	"regexp"
	"strings"
)
func trimHtml(src string) string {
    //将HTML标签全转换成小写
    re, _ := regexp.Compile("\\<[\\S\\s]+?\\>")
    src = re.ReplaceAllStringFunc(src, strings.ToLower)
    //去除STYLE
    re, _ = regexp.Compile("\\<style[\\S\\s]+?\\</style\\>")
    src = re.ReplaceAllString(src, "")
    //去除SCRIPT
    re, _ = regexp.Compile("\\<script[\\S\\s]+?\\</script\\>")
    src = re.ReplaceAllString(src, "")
    //去除所有尖括号内的HTML代码，并换成换行符
    re, _ = regexp.Compile("\\<[\\S\\s]+?\\>")
    src = re.ReplaceAllString(src, "\n")
    //去除连续的换行符
    re, _ = regexp.Compile("\\s{2,}")
    src = re.ReplaceAllString(src, "\n")
    return strings.TrimSpace(src)
}
func main(){
	var url string
	fmt.Printf("本程序由 【陈瑞】 开发，itruirui@outlook.com http://www.xiucaozuo.cn\n\n")
	fmt.Printf("本程序，仅仅能获取部分网站的内容，请勿用于商业途径！\n\n")
	fmt.Printf("请输入URL地址：")
	fmt.Scanf("%s", &url)
	resp, err := http.Get(url)
	if err != nil{
		fmt.Printf("爬取失败，失败原因：", err)
		fmt.Scan(&url)
		return
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK{
		fmt.Println("爬取失败，失败原因：", resp.StatusCode)
		fmt.Scan(&url)
		return
	}
	all, err := ioutil.ReadAll(resp.Body)
	if err != nil{
		fmt.Printf("爬取失败，失败原因：", err)
		fmt.Scan(&url)
	}
	fmt.Printf("%s",trimHtml(string(all)))
	f, _ := os.Create("./爬取的网页内容.txt") //创建文件
	f.Write([]byte(trimHtml(string(all))))
	f.Close()
	fmt.Println("\n爬取结束，点击右上角叉叉结束本程序！")
	fmt.Scan(&url)
}
/**
 * 判断文件是否存在  存在返回 true 不存在返回false
 */
func checkFileIsExist(filename string) bool {
	var exist = true
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		exist = false
	}
	return exist
}